/*
Victor M. Campa
Servicio de Microscopia y Analisis de Imgen del IBBTEC.
victormanuel.campa@unican.es.com
*/

*/
Esta herramienta es una macro-tool que una vez instalada en imagej nos permite discriminar y eliminar la autofluorescencia. Se basa el el hecho de que la autofluorescencia se detecta en todas las longitudes de onda y aparecera en todos los canales, mientras que la seal de nuestro fluoroforo se restringe a las longitudes de onda de su espectro de emision y por lo tanto solo aparecera en un canal.
Como la intensidad de la autofluorescencia varia con la longitud de onda, esta se normaliza su valor calculando el ratio entre los dos canales con autofluorescencia y para ello es necesario seleccionar una o varias ROI en la imagen en la seal provenga unicamente de la autofluorescencia y aadirlas al ROI manager.
*/

var Signal=1
var Autofluo=2

// Este comando crea un nuevo boton de herramienta
macro "IBBTEC Tool - C000D22D23D24D25D26D28D38D39D3aD3bD3cD42D43D44D45D46D48D52D54D56D62D64D66D68D69D6aD6bD6cD73D75D78D7aD7cD88D8cD92D93D94D95D96Da2Da4Da6Da8Da9DaaDabDacDb2Db4Db6Db8DbcDc3Dc5Dc8DccC000C111C222C333C444C555C666C777C888C999CaaaCbbbCcccCdddCeeeCfffD00D01D02D03D04D05D06D07D08D09D0aD0bD0cD0dD0eD0fD10D11D12D13D14D15D16D17D18D19D1aD1bD1cD1dD1eD1fD20D21D27D29D2aD2bD2cD2dD2eD2fD30D31D32D33D34D35D36D37D3dD3eD3fD40D41D47D49D4aD4bD4cD4dD4eD4fD50D51D53D55D57D58D59D5aD5bD5cD5dD5eD5fD60D61D63D65D67D6dD6eD6fD70D71D72D74D76D77D79D7bD7dD7eD7fD80D81D82D83D84D85D86D87D89D8aD8bD8dD8eD8fD90D91D97D98D99D9aD9bD9cD9dD9eD9fDa0Da1Da3Da5Da7DadDaeDafDb0Db1Db3Db5Db7Db9DbaDbbDbdDbeDbfDc0Dc1Dc2Dc4Dc6Dc7Dc9DcaDcbDcdDceDcfDd0Dd1Dd2Dd3Dd4Dd5Dd6Dd7Dd8Dd9DdaDdbDdcDddDdeDdfDe0De1De2De3De4De5De6De7De8De9DeaDebDecDedDeeDefDf0Df1Df2Df3Df4Df5Df6Df7Df8Df9DfaDfbDfcDfdDfeDff"{

ImageID = getImageID();
n = roiManager("count"); 
//cuenta el numero de ROI en el manager
     if (n==0) 
         exit("This macro requires at least one ROI Manager entry");      
	sumCh1 = 0;
	sumCh2 = 0; 
     for (i=0; i<n; i++) {
         roiManager("select", i);
	Stack.setChannel(Signal); 
         getStatistics(area, mean);
         sumCh1 += mean;
	Stack.setChannel(Autofluo);
         getStatistics(area, mean); 
         sumCh2 += mean;
     } 
//suma la fluorescencia media de todas las ROI en cada canal
     	average1 = sumCh1/n;
	average2 = sumCh2/n; 
	ratio = average1/average2;
	print("Fluo Ch1=", average1);
	print("Fluo Ch2=", average2);
	print("ratio Ch1/Ch2=", ratio);
// calcula el ratio entre las ROI de los dos canales
//por ultimo se resta a la seal el valor de autofluorescencia corregido por el ratio entre las dos.
selectImage(ImageID);
run("Select All");
Stack.setChannel(Signal);
run("Copy");
run("Internal Clipboard");
selectImage(ImageID);
Stack.setChannel(Autofluo);
run("Copy");
run("Internal Clipboard");
run("Multiply...", "value=ratio");
imageCalculator("Subtract create", "Clipboard","Clipboard-1");
selectWindow("Clipboard");
close();
selectWindow("Clipboard-1");
close();
selectWindow("Result of Clipboard");
rename("Autofluorescence Ch1-Ch2");
}

 macro "IBBTEC Tool Options" {
       Signal = getNumber("Canal tincion: ", Signal);
       Autofluo = getNumber("Canal referencia autofluorescencia: ", Autofluo);
    }